CloudWatch AgentをEC2にログインせずに設定してみた
はじめに
こんにちは、望月です。
CloudWatch Agentの設定をSystems Manager(SSM)を利用しEC2にログインせずに設定してみました。CLI操作が苦手な人や、複数台に対し処理を行うことができるため台数多くて1台づつログインし設定するのが大変といった方に向いているかと思います。
やってみた
前提
対象のEC2はすでに作成済みでSSMやCloudWatchを利用するため、パブリックIPが割り当てられています。 プライベートIPのみでインターネット接続ができない場合、別途PrivateLinkの設定が必要となります。下記ブログを参考に設定しましょう。
プライベートサブネットに配置したEC2にAWS Systems Manager Session Managerを使ってアクセスする
また、プロセス情報取得のため「httpd(apache)」がインストール済みとなります。
- Amazon Linux 2
- amazon-ssm-agent
- バージョン:2.3.372.0
- httpd
- バージョン:2.4.39-1
IAMロールの作成
マネージメントコンソール:『IAM』 → 『ロール』
EC2に割り当てるIAMロールを作成します。例で「ec2-cloudwatch-role」という名前をつけています。
- アタッチするマネージドポリシーは以下2つになります。
- AmazonEC2RoleforSSM
- CloudWatchAgentServerPolicy
IAMロールのEC2割り当て
マネージメントコンソール:『EC2』 → 『インスタンス』
対象のEC2に先程作成したIAMロールを割り当てします。
SSMにEC2インスタンスが認識されたことを確認
マネージメントコンソール:『EC2』 → 『マネージドサービス』
SSMの対象として、EC2インスタンスが認識されたことを確認します。リトライのタイミングなどで認識に時間がかかる可能性があるため、必要であれば、EC2インスタンスの再起動を行います。
CloudWatch Agentのインストール
マネージメントコンソール:『EC2』 → 『コマンドの実行』
CloudWatch Agentのインストールを行います。対象のEC2を選択、下記指定し、実行します。
- コマンドのドキュメント: AWS-ConfigureAWSPackage
- Action: install
- Name: AmazonCloudWatchAgent
- Version: latest
コマンドのドキュメントを指定します。
Action、Name、Versionを指定します。
パラメータストアに設定追加
マネージメントコンソール:『EC2』 → 『パラメータストア』
パラメータストアにCloudWatchの設定を追加します。パラメータストアで設定を管理することで、複数サーバで同一設定を行う場合など、大変便利です。
ここでは設定をLinuxとapache、用途ごとに分けています。マネージドポリシーの権限で読み込み可能なパラメータストアが「AmazonCloudWatch-*」となっているため、名前をつけるときは気をつけましょう。
設定の詳細については、下記ドキュメントを確認してください。
CloudWatch エージェント設定ファイルを手動で作成または編集する - Amazon CloudWatch
AmazonCloudWatch-linux
Linux用の設定になります。CPU, メモリ, ディスク及びmessagesログを転送する設定を入れています。
{ "metrics": { "append_dimensions": { "AutoScalingGroupName": "${aws:AutoScalingGroupName}", "ImageId": "${aws:ImageId}", "InstanceId": "${aws:InstanceId}", "InstanceType": "${aws:InstanceType}" }, "metrics_collected": { "cpu": { "measurement": [ "cpu_usage_idle", "cpu_usage_iowait", "cpu_usage_user", "cpu_usage_system" ], "metrics_collection_interval": 60, "resources": [ "*" ], "totalcpu": false }, "disk": { "measurement": [ "used_percent", "inodes_free" ], "metrics_collection_interval": 60, "resources": [ "*" ] }, "diskio": { "measurement": [ "io_time" ], "metrics_collection_interval": 60, "resources": [ "*" ] }, "mem": { "measurement": [ "mem_used_percent" ], "metrics_collection_interval": 60 }, "swap": { "measurement": [ "swap_used_percent" ], "metrics_collection_interval": 60 } } }, "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/var/log/messages", "log_group_name": "messages", "log_stream_name": "{instance_id}" } ] } } } }
AmazonCloudWatch-linux-web
apache用の設定になります。プロセス及びerrorログを転送する設定を入れています。
プロセスについては"pid_file"で作成プロセスを見るほかに"exe"でプロセスの名前なども見ることができます。
procstat プラグインでプロセスメトリクスを収集する - Amazon CloudWatch
{ "metrics": { "metrics_collected": { "procstat": [ { "pid_file": "/var/run/httpd/httpd.pid", "measurement": [ "cpu_time", "cpu_usage", "memory_locked", "memory_rss", "memory_vms", "num_threads", "pid", "pid_count" ] } ] } }, "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/var/log/httpd/error_log", "log_group_name": "errorlog", "log_stream_name": "{instance_id}" } ] } } } }
CloudWatch Agentに設定反映
マネージメントコンソール:『EC2』 → 『コマンドの実行』
パラメータストアに追加したCloudWatchの設定をEC2インスタンスに反映させます。
- コマンドのドキュメント: AmazonCloudWatch-ManageAgent
- Action: configure
- Mode: ec2
- Optional Configuration Source: ssm
- Optional Configuration Location: AmazonCloudWatch-linux
- Optional Restart: yes
コマンドのドキュメントを指定します。
Action、Mode、Optional Configuration、Optional Restartを指定します。
引き続き、apache用の設定を反映します。Actionが「configure (append)」と設定の追加となるので注意しましょう。
- コマンドのドキュメント: AmazonCloudWatch-ManageAgent
- Action: configure (append)
- Mode: ec2
- Optional Configuration Source: ssm
- Optional Configuration Location: AmazonCloudWatch-linux-web
- Optional Restart: yes
CloudWatchの確認
マネージメントコンソール:『CloudWatch』 → 『メトリクス』 and 『ログ』
メトリクス及びログを確認し、対象のEC2インスタンスの情報が増えていることを確認します。ログについてはCloudWatch Logsではログは監視用途の一時的な保管を行う形とし、長期保存の場合はS3で行ったほうがコストを抑えることができるため、必要に応じ保持期間を変更するのがオススメです。
CloudWatchのメトリクス
CloudWatchのロググループ
まとめ
EC2にログインせずにCloudWatch Agentのインストールを行い、CloudWatchで必要な情報を取れるように設定してみました。Systems Managerを活用することで、簡単に設定することができます。
Systems Managerは、ほかにも様々なことができるので、ぜひ活用していきましょう!